/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package control;

import control.accion.CandidatoAdministrar;
import control.accion.CandidatoEliminar;
import control.accion.CandidatoNuevo;
import control.accion.CargoAdministrar;
import control.accion.CargoNuevo;
import control.accion.EmpleadoAdministrar;
import control.accion.EmpleadoNuevo;
import control.accion.PrestacionAdministrar;
import control.accion.PrestacionNuevo;
import control.accion.ReporteAdministrar;
import control.accion.UsuarioAdministrar;
import control.accion.UsuarioEliminar;
import control.accion.UsuarioNuevo;
import entidad.Candidato;
import entidad.Cargo;
import entidad.Empleado;
import entidad.Prestacion;
import entidad.Usuario;
import frontera.interfaz.Tupla;
import frontera.interfaz.panel.PanelBusqueda;
import frontera.interfaz.panel.resultados.PanelResultadosSeleccion;
import java.util.ArrayList;
import javax.swing.Action;

/**
 *
 * @author tuareg
 *
 */
public class AdministrarPermisos {

    public AdministrarPermisos(Usuario usuario) {
        this.usuario = usuario;
        if (usuario.getEmpleadoAsociado().getCargoAsociado().getNivelPermisos().equals("Gerente")) {
            nivelDePermisos = 1;
        } else if (usuario.getEmpleadoAsociado().getCargoAsociado().getNivelPermisos().equals("Auxiliar")) {
            nivelDePermisos = 2;
        } else if (usuario.getEmpleadoAsociado().getCargoAsociado().getNivelPermisos().equals("Reclutamiento")) {
            nivelDePermisos = 3;
        } else if (usuario.getEmpleadoAsociado().getCargoAsociado().getNivelPermisos().equals("Coordinador")) {
            nivelDePermisos = 4;
        } else {
            nivelDePermisos=0;  // El código debe inicializar esta variable final así vaya a finalizar
            System.out.println("Un usuario sin permisos ha intentado entrar al sistema");
            System.exit(1);
        }
    }

    //Cada petición de permisos de acciones retorna dos cosas, una las acciones correspondientes a todos los botones de la interfaz y la segunda
    // todas las acciones del primer array que desean escuchar la selección de elementos en la lista.
    public Tupla<ArrayList<Action>,ArrayList<PanelResultadosSeleccion<Candidato>>> getAccionesCandidatos(PanelBusqueda<Candidato> panel) {
        ArrayList<Action> accionesCandidatos = new ArrayList<Action>();
        ArrayList<PanelResultadosSeleccion<Candidato>> listeners = new ArrayList<PanelResultadosSeleccion<Candidato>>();
        if (nivelDePermisos == 1 || nivelDePermisos == 3) {
            accionesCandidatos.add(new CandidatoNuevo());
            accionesCandidatos.add(new CandidatoEliminar(panel));
            listeners.add((PanelResultadosSeleccion<Candidato>) accionesCandidatos.get(1));
        }

        return new Tupla<ArrayList<Action>, ArrayList<PanelResultadosSeleccion<Candidato>>>(accionesCandidatos, listeners);
    }

    public Tupla<ArrayList<Action>,ArrayList<PanelResultadosSeleccion<Cargo>>> getAccionesCargos(PanelBusqueda<Cargo> panel) {
        ArrayList<Action> accionesCargos = new ArrayList<Action>();
        ArrayList<PanelResultadosSeleccion<Cargo>> listeners = new ArrayList<PanelResultadosSeleccion<Cargo>>();
        if (nivelDePermisos == 1) {
            accionesCargos.add(new CargoNuevo());
        }
        return new Tupla<ArrayList<Action>, ArrayList<PanelResultadosSeleccion<Cargo>>>(accionesCargos, listeners);
    }

    public Tupla<ArrayList<Action>,ArrayList<PanelResultadosSeleccion<Empleado>>> getAccionesEmpleado() {
        ArrayList<Action> accionesEmpleado = new ArrayList<Action>();
        ArrayList<PanelResultadosSeleccion<Empleado>> listeners = new ArrayList<PanelResultadosSeleccion<Empleado>>();
        if (nivelDePermisos != 2 && nivelDePermisos != 4) {
            accionesEmpleado.add(new EmpleadoNuevo());
        }
        return new Tupla<ArrayList<Action>, ArrayList<PanelResultadosSeleccion<Empleado>>>(accionesEmpleado, listeners);
    }

    public Tupla<ArrayList<Action>,ArrayList<PanelResultadosSeleccion<Prestacion>>> getAccionesPrestaciones(PanelBusqueda<Prestacion> panel) {
        ArrayList<Action> accionesPrestaciones = new ArrayList<Action>();
        ArrayList<PanelResultadosSeleccion<Prestacion>> listeners = new ArrayList<PanelResultadosSeleccion<Prestacion>>();
        if (nivelDePermisos == 1 || nivelDePermisos == 2) {
            accionesPrestaciones.add(new PrestacionNuevo());
            //accionesPrestaciones.add(new PrestacionEliminar(panel));
            //listeners.add((PanelResultadosSeleccion<Prestacion>) accionesPrestaciones.get(1));
        }
        return new Tupla<ArrayList<Action>, ArrayList<PanelResultadosSeleccion<Prestacion>>>(accionesPrestaciones, listeners);
    }

    public Tupla<ArrayList<Action>,ArrayList<PanelResultadosSeleccion<Usuario>>> getAccionesUsuarios(PanelBusqueda<Usuario> panel) {
        ArrayList<Action> accionesUsuarios = new ArrayList<Action>();
        ArrayList<PanelResultadosSeleccion<Usuario>> listeners = new ArrayList<PanelResultadosSeleccion<Usuario>>();
        if (nivelDePermisos == 1) {
            accionesUsuarios.add(new UsuarioNuevo());
            accionesUsuarios.add(new UsuarioEliminar(panel));
            listeners.add((PanelResultadosSeleccion<Usuario>) accionesUsuarios.get(1));
        }
        return new Tupla<ArrayList<Action>, ArrayList<PanelResultadosSeleccion<Usuario>>>(accionesUsuarios, listeners);
    }

    public ArrayList<Action> getAccionesInicio() {
        ArrayList<Action> accionesInicio = new ArrayList<Action>();
        if (permisoEmpleados()) {
            accionesInicio.add(new EmpleadoAdministrar());
        }
        if (permisoCargos()) {
            accionesInicio.add(new CargoAdministrar());
        }
        if (permisoCandidatos()) {
            accionesInicio.add(new CandidatoAdministrar());
        }
        if (permisoPrestaciones()) {
            accionesInicio.add(new PrestacionAdministrar());
        }
        if (permisoReportes()) {
            accionesInicio.add(new ReporteAdministrar());
        }
        if (permisoUsuarios()) {
            accionesInicio.add(new UsuarioAdministrar());
        }
        return accionesInicio;
    }

    public boolean permisoEmpleados() {
        boolean retorno;
        if (nivelDePermisos != 2 && nivelDePermisos >0) {
            retorno = true;
        } else {
            retorno = false;
        }
        return retorno;
    }

    public boolean permisoCandidatos() {
        boolean retorno;
        if (nivelDePermisos == 1 || nivelDePermisos == 3) {
            retorno = true;
        } else {
            retorno = false;
        }
        return retorno;
    }

    public boolean permisoCargos() {
        boolean retorno;
        if (nivelDePermisos == 1) {
            retorno = true;
        } else {
            retorno = false;
        }
        return retorno;
    }

    public boolean permisoUsuarios() {
        boolean retorno;
        if (nivelDePermisos == 1) {
            retorno = true;
        } else {
            retorno = false;
        }
        return retorno;
    }

    public boolean permisoPrestaciones() {
        boolean retorno;
        if (nivelDePermisos == 1 || nivelDePermisos == 2) {
            retorno = true;
        } else {
            retorno = false;
        }
        return retorno;
    }

    public boolean permisoReportes() {
        boolean retorno;
        if (nivelDePermisos == 1 || nivelDePermisos == 2) {
            retorno = true;
        } else {
            retorno = false;
        }
        return retorno;
    }

    public Usuario getUsuario() {
        return usuario;
    }
    private Usuario usuario;
    private final int nivelDePermisos;
}
